package com.O1DesignModel;

/**
 * 策略模式
 * 模式定义：定义一系列算法，将每个算法封装起来，使其可以相互替换。
 * 适用场景：
 *
 * 算法动态切换（如支付方式、排序策略）。
 * 避免多重条件判断（将条件逻辑封装为策略类）。
 *
 * 我理解的就是有一个接口，如支付接口，
 *  然后有具体的实现如：支付宝支付，微信支付 每个支付都是单独的支付接口
 *  然后有一个专门的管理累 管理这些支付接口
 *      管理接口 首先利用多态 传入具体想实现的支付接口，在构造方法传入具体的支付接口
 *  如：支付宝支付，微信支付
 */
interface PayStrategy {
     void pay(Double money);
}

class AliPay implements PayStrategy {
    public void pay(Double money){
        System.out.println("支付宝支付"+money+"元！");
    }
}

class WechatPay implements PayStrategy {
    public void pay(Double money){
        System.out.println("微信支付"+money+"元！");
    }
}

class PayContext{
    PayStrategy payStrategy;

    public PayContext(PayStrategy payStrategy){
        this.payStrategy = payStrategy;
    }

    public void setPayStrategy(PayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }

    public void pay(Double money){
        payStrategy.pay(money);
    }
}
public class O2_Strategy {
    public static void main(String[] args) {
        PayContext payStrategy = new PayContext(new AliPay());
        payStrategy.pay(100.0);

        payStrategy.setPayStrategy(new WechatPay());
        payStrategy.pay(99.0);
    }


}
